package com.alibaba.citrus.cr.platform.enhance.facade.service.diff.sap;

import java.time.LocalDateTime;
import java.util.Date;

import javax.annotation.Resource;

import com.alibaba.citrus.cr.common.annotation.FacadeInvoker;
import com.alibaba.citrus.cr.platform.enhance.facade.service.diff.common.LocalDateTime2DateUtils;
import com.alibaba.cz.base.tool.log.Log;
import com.alibaba.lattice2.epoch.sdk.model.Result;

import com.epoch.app.crplatformenhance.model.dto.Sap006DiffRequest;
import com.epoch.app.crplatformenhance.model.dto.Sap015DiffRequest;
import com.epoch.app.crplatformenhance.model.dto.Sap017DiffRequest;
import com.epoch.app.crplatformenhance.sap006diffcheck.service.Sap006DiffCheckService;
import com.epoch.app.crplatformenhance.sap015diffcheck.service.Sap015DiffCheckService;
import com.epoch.app.crplatformenhance.sap017diffcheck.service.Sap017DiffCheckService;
import com.epoch.app.crplatformenhance.sapdiffcheck.service.SapDiffCheckService;
import org.springframework.stereotype.Service;

/**
 * @author: qiaojiange
 * @create: 2022/01/21
 * @Description sap 对账
 */

@Service
public class SapDiffCheckServiceImpl implements SapDiffCheckService {
    private Log log = Log.getLogger(SapDiffCheckServiceImpl.class);

    @Resource
    private Sap017DiffCheckService sap017DiffCheckService;

    @Resource
    private Sap015DiffCheckService sap015DiffCheckService;

    @Resource
    private Sap006DiffCheckService sap006DiffCheckService;
    /**
     * 主要是将外部单号添加到销售单上
     *
     * @return
     */
    @FacadeInvoker
    public Result<String> sap006DiffCheck() {
//    问题：
//    1. 同步过来了，但是销售单删除了怎么校验？
//    2，SAP 对账最好能做到准试试，如果不是准实时，是否可以按照每小时对账一次进行对账。
//    原因：每次都要从日志中提取同步的数据，尽量减少每次扫描日志的次数
//
//    对账步骤：
//    1. 获取 SAP 报文
//    2. SAP 报文转换
//    3. SAP 报文和标准模板进行对比
//    4. 根据 SAP 报文中相关信息获取对应的销售单或者销售子单
//    5. 销售主单和标准模板进行对比
//    6. 销售子单和标准模板进行对比
//    7. sap 转换后的报文和销售单转换后的字段进行对比

        /**
         * @param logStore  集成日志 使用 api_adaptor_store
         * @param condition 查询条件，查询语法参考
         * {@link https://help.aliyun.com/document_detail/29060.htm?spm=a2c4g.11186623.0.0.4ff71edf8WwJ9C#concept-tnd-1jq-zdb}
         * @param topic 集成日志使用 api_adaptor
         * @param fromTime 查询开始时间
         * @param toTime 查询结束时间
         * @param line 查询的条目数量
         * @param offset 查询日志的偏移量
         * @return Pair
         * 		left : 总条目数量
         *      right : 日志明细
         */
        Sap006DiffRequest request = new Sap006DiffRequest();
        LocalDateTime localDateTime = LocalDateTime.now();
        localDateTime.minusDays(3);
        request.setStartDate(LocalDateTime2DateUtils.parse(localDateTime));
        request.setEndDate(new Date());
        //todo 韩国进行补充
        request.setCondition("");
        return sap006DiffCheckService.diffCheck(request);
    }

    /**
     * SAP015 接口和销售订单的之间的对账
     *
     * @return 对账结果
     */
    @FacadeInvoker
    public Result<String> sap015DiffCheck() {

        Sap015DiffRequest request = new Sap015DiffRequest();
        LocalDateTime localDateTime = LocalDateTime.now();
        localDateTime.minusDays(3);
        request.setStartDate(LocalDateTime2DateUtils.parse(localDateTime));
        request.setEndDate(new Date());
        //todo 韩国进行补充
        request.setCondition("");
        return sap015DiffCheckService.diffCheck(request);
    }

    /**
     * SAP017 接口和交货单（调拨单）的之间的对账
     *
     * @return
     */
    @FacadeInvoker
    public Result<String> sap017DiffCheck() {
        Sap017DiffRequest request = new Sap017DiffRequest();
        LocalDateTime localDateTime = LocalDateTime.now();
        localDateTime.minusDays(3);
        request.setStartDate(LocalDateTime2DateUtils.parse(localDateTime));
        request.setEndDate(new Date());
        request.setCondition("SI_ECC_DeliveryOrder_Create_Asyn_Out and deliveryOrderId");
        return sap017DiffCheckService.diffCheck(request);
    }


}
